@example @general
Feature: API Validation

    @positive @password
    Scenario: Remove password
        Given I generate a PDF file as "fileInput"
        And the pdf contains 3 pages
        And the pdf is encrypted with password "password123"
        And the request data includes
            | parameter | value       |
            | password  | password123 |
        When I send the API request to the endpoint "/api/v1/security/remove-password"
        Then the response content type should be "application/pdf"
        And the response file should have size greater than 0
        And the response PDF is not passworded
        And the response status code should be 200

    @negative @password
    Scenario: Remove password wrong password
        Given I generate a PDF file as "fileInput"
        And the pdf contains 3 pages
        And the pdf is encrypted with password "password123"
        And the request data includes
            | parameter | value         |
            | password  | wrongPassword |
        When I send the API request to the endpoint "/api/v1/security/remove-password"
        Then the response status code should be 500
        And the response should contain error message "Job failed: org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException: Cannot decrypt PDF, the password is incorrect"

    @positive @info
    Scenario: Get info
        Given I generate a PDF file as "fileInput"
        When I send the API request to the endpoint "/api/v1/security/get-info-on-pdf"
        Then the response content type should be "application/json"
        And the response file should have size greater than 100
        And the response status code should be 200

    @positive @password
    Scenario: Add password
        Given I generate a PDF file as "fileInput"
        And the pdf contains 3 pages
        And the request data includes
            | parameter | value       |
            | password  | password123 |
        When I send the API request to the endpoint "/api/v1/security/add-password"
        Then the response content type should be "application/pdf"
        And the response file should have size greater than 100
        And the response PDF is passworded
        And the response status code should be 200

    @positive @password
    Scenario: Add password with other params
        Given I generate a PDF file as "fileInput"
        And the pdf contains 3 pages
        And the request data includes
            | parameter     | value       |
            | ownerPassword | ownerPass   |
            | password      | password123 |
            | keyLength     | 256         |
            | canPrint      | true        |
            | canModify     | false       |
        When I send the API request to the endpoint "/api/v1/security/add-password"
        Then the response content type should be "application/pdf"
        And the response file should have size greater than 100
        And the response PDF is passworded
        And the response status code should be 200

    @positive @watermark
    Scenario: Add watermark
        Given I generate a PDF file as "fileInput"
        And the pdf contains 3 pages
        And the request data includes
            | parameter     | value            |
            | watermarkType | text             |
            | watermarkText | Sample Watermark |
            | fontSize      | 30               |
            | rotation      | 45               |
            | opacity       | 0.5              |
            | widthSpacer   | 50               |
            | heightSpacer  | 50               |
            | alphabet      | roman            |
            | customColor   | #d3d3d3          |
        When I send the API request to the endpoint "/api/v1/security/add-watermark"
        Then the response content type should be "application/pdf"
        And the response file should have size greater than 100
        And the response status code should be 200

    @positive
    Scenario: Remove blank pages
        Given I generate a PDF file as "fileInput"
        And the pdf contains 3 blank pages
        And the request data includes
            | parameter    | value |
            | threshold    | 90    |
            | whitePercent | 99.9  |
        When I send the API request to the endpoint "/api/v1/misc/remove-blanks"
        Then the response content type should be "application/octet-stream"
        And the response file should have extension ".zip"
        And the response ZIP should contain 1 files
        And the response file should have size greater than 0

    @positive @flatten
    Scenario: Flatten PDF
        Given I generate a PDF file as "fileInput"
        And the request data includes
            | parameter        | value |
            | flattenOnlyForms | false |
        When I send the API request to the endpoint "/api/v1/misc/flatten"
        Then the response content type should be "application/pdf"
        And the response file should have size greater than 0
        And the response status code should be 200

    @positive @metadata
    Scenario: Update metadata
        Given I generate a PDF file as "fileInput"
        And the request data includes
            | parameter | value          |
            | author    | John Doe       |
            | title     | Sample Title   |
            | subject   | Sample Subject |
            | keywords  | sample, test   |
            | producer  | Test Producer  |
        When I send the API request to the endpoint "/api/v1/misc/update-metadata"
        Then the response content type should be "application/pdf"
        And the response file should have size greater than 0
        And the response PDF metadata should include "Author" as "John Doe"
        And the response PDF metadata should include "Keywords" as "sample, test"
        And the response PDF metadata should include "Subject" as "Sample Subject"
        And the response PDF metadata should include "Title" as "Sample Title"
        And the response status code should be 200


